<?php
/*** 
Nơi chứa các hàm xử lý thanh toán
Bảng coins lưu ví tiền ảo của use: coi_use_id, coi_value
Bảng payment_log lưu tất cả các thông tin thanh toán
Bảng payment_news lưu các thông tin của use sử dụng hình thức trả phí từng tin và tin đã đọc (đã thanh toán)
Bảng payment_news_vip dành cho các use sử dụng hình thức trả tiền trọn gói theo tháng
***/

//Hàm kiểm tra số dư tài khoản
function check_coins($user_id) {
    $db_coins = new db_query('SELECT coi_use_id,coi_value FROM coins WHERE coi_use_id = '.$user_id.' LIMIT 1');
    $coins = mysql_fetch_assoc($db_coins->result); unset($db_coins);
    if(empty($coins['coi_value'])){
        return 0;
    }
    else{
        return $coins['coi_value'];
    };
}
//Check xem tài khoản có đủ khả năng trả tiền ko
function check_payment($user_id,$pay_value) {
    $db_coins = new db_query('SELECT coi_use_id,coi_value FROM coins WHERE coi_use_id = '.$user_id.' LIMIT 1');
    $coins = mysql_fetch_assoc($db_coins->result); unset($db_coins);
    if($coins['coi_value'] >= $pay_value) return true;
    else return false;
}
//Ghi lại log giao dịch của user
//kiểu nạp tiền 1, kiểu kích vip 2, kiểu mua tin 3
function paylog($user_id,$pay_type = 0,$pay_value = 0,$pay_des = '') {
    $pay_time = time();
    $db_paylog = new db_execute('INSERT INTO 
                                payment_log(pay_use_id,pay_type,pay_value,pay_time,pay_description) 
                                VALUES('.$user_id.','.$pay_type.','.$pay_value.','.$pay_time.',"'.$pay_des.'")');
    if($db_paylog->total == 1) return true;
    else return false;
}

//Trừ tiền của tài khoản
function paydown($user_id,$value,$pay_type = 0,$pay_des = '') {
    // kiểm tra số dư có trong tk
    $user_coins = check_coins($user_id);
    // nếu số dư lớn hơn giá trị thanh toán thì trừ
    if($user_coins >= $value) {
        $db_paydown = new db_execute('UPDATE coins SET coi_value = coi_value - '.$value.' WHERE coi_use_id = '.$user_id);
        // kiểm tra trừ thành công hay không ?
        if($db_paydown->total == 1) {
            //ghi lại log giao dịch
            if(paylog($user_id,$pay_type,$value,$pay_des)) return true;  
            else return false;
        }
        else return false; 
    }else {
        return false;
    }
}
//Nạp tiền cho tài khoản
function payup($user_id,$value,$pay_des = '') {
    // kiểm tra số dư có trong tk
    $user_coins = check_coins($user_id);
    //Nếu đã từng nạp tiền, use đã tồn tại trong bảng coins
    if($user_coins) {
        $db_payup = new db_execute('UPDATE coins SET coi_value = coi_value + '.$value.' WHERE coi_use_id = '.$user_id);
        //Kiểm tra nạp thành công hay không ?
        if($db_payup->total == 1) {
            //ghi lại log giao dịch
            if(paylog($user_id,1,$value,$pay_des)) return true;
            else return false;
        }else {
            return false;
        }    
    }
    //Nếu chưa nạp bao giờ, thì insert vào
    else {
        $db_payup = new db_execute('INSERT INTO coins(coi_use_id,coi_value) VALUES('.$user_id.','.$value.')');
        if($db_payup->total == 1) {
            //ghi lại log giao dịch
            if(paylog($user_id,1,$value,$pay_des)) return true;
            else return false;
        }else {
            return false;
        }   
    }   
}
//Check xem tài khoản có phải vip ko
function check_vip ($user_id) {
    $current_time = time();
    $db_news_vip = new db_query('SELECT pav_use_id,pav_time FROM payment_news_vip WHERE pav_use_id = '.$user_id.' LIMIT 1');
    $news_vip = mysql_fetch_assoc($db_news_vip->result);unset($db_news_vip);
    if($news_vip && $news_vip['pav_time'] > $current_time) return true;
    else return false;
}
//Trả về thời gian nếu tài khoản là vip
function check_vip_time ($user_id) {
    $db_news_vip = new db_query('SELECT pav_use_id,pav_time FROM payment_news_vip WHERE pav_use_id = '.$user_id.' LIMIT 1');
    $news_vip = mysql_fetch_assoc($db_news_vip->result);unset($db_news_vip);
    if($news_vip && $news_vip['pav_time']) return $news_vip['pav_time'];
    else return -1;
}
//Kích hoạt vip (thanh toán theo tháng)
function pay_vip($user_id,$vip_type = 0,$pay_des = '') {
    //$vip_type là kiểu kích hoạt vip, vip 1 tuần = 1 , vip 1 tháng = 2, vip 6 tháng = 3, vip 1 năm  = 4
    //plan theo kiểu:
    switch($vip_type) {
        case 1 :
        $pav_time = 604800;
        $pay_coins = 10;
        $pay_des = 'Kích hoạt vip tuần';
        break;
        case 2 :
        $pav_time = 2592000;
        $pay_coins = 20;
        $pay_des = 'Kích hoạt vip tháng';
        break;
        case 3 :
        $pav_time = 15552000;
        $pay_coins = 100;
        $pay_des = 'Kích hoạt vip 6 tháng';
case 4 :
        $pav_time = 31104000;
        $pay_coins = 150;
        $pay_des = 'Kích hoạt vip năm';
        break;
        default :
        $pav_time = 0;
        $pay_coins = 0;
        $pay_des = 'Kích hoạt không thành công';
    }
    //Check xem user có đủ tiền trả kick hoạt này ko, ko đủ trả về 3
    if(!check_payment($user_id,$pay_coins)) {
        return 3;
    }
    //Check xem hiện tại có phải vip hay k
    $user_vip_time = check_vip_time($user_id);
    $current_time = time();
    //Nếu đang là vip
    if($user_vip_time > $current_time) {
        $db_payvip = new db_execute('UPDATE payment_news_vip SET pav_time = pav_time + '.$pav_time.' WHERE pav_use_id = '.$user_id); 
        paydown($user_id,$pay_coins,2,''.$pay_des.'');  
    }
    //Nếu đã từng là vip
    else if($user_vip_time > 0 && $user_vip_time <= $current_time) {
        $db_payvip = new db_execute('UPDATE payment_news_vip SET pav_time = '.$current_time.' + '.$pav_time.' WHERE pav_use_id = '.$user_id); 
        paydown($user_id,$pay_coins,2,''.$pay_des.'');        
    }
    //Nếu chưa kích hoạt vip bao giờ
    else {
        $db_payvip = new db_execute('INSERT INTO payment_news_vip(pav_use_id,pav_time) VALUES('.$user_id.','.($current_time + $pav_time).')');
        paydown($user_id,$pay_coins,2,''.$pay_des.'');
    }
    if($db_payvip->total == 1) {
        return 1;
    }  
    else return 2;
}

//Hàm check xem user đã mua tin hay chưa
function check_pay_news($user_id,$news_id) {
    $db_check_pay = new db_query('SELECT pan_use_id,pan_news_id FROM payment_news WHERE pan_use_id = '.$user_id.' AND pan_news_id ='.$news_id.' LIMIT 1');
    $check_pay = mysql_fetch_assoc($db_check_pay->result); unset($db_check_pay);
    if($check_pay) return true;
    else return false;
}
//Hàm ghi lại tin mà user đã đọc (đã mua)
function pay_news_log ($user_id,$news_id) {
    $db_pay_news = new db_execute('INSERT INTO payment_news(pan_use_id,pan_news_id) VALUES('.$user_id.','.$news_id.')');
    if($db_pay_news->total == 1) {
        return true;
    }
    else return false;
}
//Hàm check quyền đọc tin
function view_news_check($user_id,$news_id) {
    //Check xem user đã mua tin này hay chưa, nếu mua rồi trả về true
    if(check_pay_news($user_id,$news_id)) {
        return true;
    }
    //Check xem user có phải vip ko, nếu vip cũng trả về true
    if(check_vip($user_id)) {
        return true;
    }
    //Check xem user con tiền và đủ khả năng mua tin hay ko (tin thường 1 coins)
    //if(check_payment($user_id,1)) {
//        paydown($user_id,1,3,'Mua tin');
//        pay_news_log($user_id,$news_id);
//        return true;
//    }
    return false;
}

?>